import random

"""
通用功能：
"""

def get_methods(self, feature=None) -> list:
    """
    # 获取类内方法

    :param self: 类对象
    :param feature: 起始位特征符号，默认失效
    :return: 类内 自书写的方法名 或 特征一致的方法名
    """
    if feature is None:  # 返回自己写的方法
        return (list(filter(lambda m: not m.startswith("_") and
                                      callable(getattr(self, m)), dir(self))))
    # 选择符合特征的方法名
    return (list(filter(lambda m: m.startswith(feature) and
                                  callable(getattr(self, m)), dir(self))))


def path_name_type(s: str) -> list:
    """将字符串拆分为 [路径,名称,类型] 返回"""
    s = s.replace('\\', '/')
    ppos = s.rfind('/') + 1
    tpos = s.rfind('.')
    tpos = tpos if tpos != -1 else None
    path = s[:ppos] if ppos > 0 else ''
    name = s[ppos:tpos] if ppos > 0 else s[:tpos]
    type = s[tpos:] if tpos is not None else ''
    return [path, name, type]


def rand(lis: list, num: int, repeat: bool = True) -> list:
    """
    随机获取num个元素

    :param lis: 元素列表
    :param num: 取出数量，0为列表元素数目
    :param repeat: 重复开关，默认重复
    :return: 重组列表
    """
    num = num if num > 0 else len(lis)  # 取0时取全部内容
    tmp = []

    if repeat:  # 重复
        for i in range(num):
            tmp.append(random.choice(lis))
    else:  # 不重复
        try:  # 最多取全部
            li = lis.copy()
            for i in range(num):
                t = random.choice(li)
                li.remove(t)
                tmp.append(t)
        except:
            pass
    return tmp


